该receive.denyCurrentBranch
配置选项控制,如果你推到一个回购的分支,是结账会发生什么.
默认情况下,它拒绝它(这就是为什么你通常只推送到没有结账分支的裸存储库).
它可以通过ignore
或禁用warn
.
另一种选择是updateInstead
.
这样做的是,如果HEAD
和工作目录相同,并且正在推送分支HEAD
,则工作目录和分支/ HEAD
同时更新.
如果工作目录不同HEAD
,则拒绝推送.
这是有用的,对于力推Web服务器,例如.
我的问题是,这个选项是否与索引相互影响?
指数是否更新?如果HEAD
和工作目录匹配,但不是Index
吗?
指数是否更新?如果HEAD和工作目录匹配,但不匹配,该怎么办?
提交0855331(git 2.4.0-rc0,2014年12月)明确指出:
当
receive.denyCurrentBranch
设置updateInstead
为时,仅当索引和工作树与当前检出的提交完全匹配时才接受尝试更新当前检出的分支的推送,在这种情况下,索引和工作树将更新以匹配推送提交.
否则推送被拒绝.
虽然同样的提交引入了push-to-checkout
钩子.
此挂钩可用于自定义此"推送 - 部署"逻辑.
钩子接收将更新当前分支的提示的提交,并且可以决定可接受哪种局部更改以及如何更新索引和工作树以匹配当前分支的更新的提示.
这为索引提供了一点灵活性.
承诺1a51b52,git 2.4.0-rc2,2015年4月又说:
设置
receive.denycurrentbranch
于updateinstead
和推进当前的分支,当工作树和索引是真正的清洁,应该重新设置工作树和匹配推树提交的指数.